package day07.Optional_demo;

import org.junit.Test;

import java.util.Optional;

/*
* Optional 使用解析
这段代码展示了 Java 8 中 Optional 类的两种基本用法，主要用于更优雅地处理可能为 null 的值，避免 NullPointerException。下面是对代码的详细解析：

1. 创建空的 Optional
Optional<Object> emptyOptional = Optional.empty();
System.out.println(emptyOptional);  // 输出: Optional.empty
Optional.empty() 是一个静态工厂方法，用于创建一个不包含任何值的空 Optional 对象
这是一个单例模式实现，所有 Optional.empty() 调用返回的是同一个实例
打印输出会显示 Optional.empty

2. 使用 ofNullable() 包装可能为 null 的值
users = null;
Optional<Users> usersOptional1 = Optional.ofNullable(users);
System.out.println(usersOptional1);  // 输出: Optional.empty
Optional.ofNullable() 是另一个静态工厂方法，它接受一个可能为 null 的值
如果传入的值是 null (如这里的 users)，它会返回一个空的 Optional (相当于 Optional.empty())
如果传入的值不是 null，它会返回一个包含该值的 Optional
打印输出对于 null 值也会显示 Optional.empty

Optional 的主要用途
明确表示"可能没有值"的语义：比直接使用 null 更清晰表达意图
避免空指针异常：强制调用者显式处理可能为空的情况
链式调用：支持函数式风格的链式操作
* */

public class OpeionalTest {
    @Test
    public void test(){
        Optional<String> optional= Optional.of("nihao");
//          置空为null
//        optional= Optional.empty();

        if (optional.isEmpty()){
            System.out.println("is null");
        }
        else {
            System.out.println("not null");
        }

    }
}
